package com.wl.application.common.untils;

import com.alibaba.fastjson.JSON;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;

/**
 * @author wl
 * @version 1.0
 * @date 2022/6/16
 * @description:
 */
public class TokenUtil {
    /**
     * token的名称
     */
    private static final String TOKEN_NAME="taken";
    /**
     * token的超时时间
     */
    private static final Long OUT_TIME=30*60*1000L;

    /**
     * 签名
     */
   private static final Algorithm a= Algorithm.HMAC256("wl-sun");

    /**
     * 生成token字符串
     * @param t
     * @param <T>
     * @return
     */
    public static<T> String createToken(T t){
        //将传入的token对象转换为json字符串
        String TJson = JSON.toJSONString(t);
        //创建token字符串
        String token = JWT.create().
                withClaim(TOKEN_NAME, TJson)
                //设置超市时间
                .withExpiresAt(new Date(System.currentTimeMillis() + OUT_TIME))
                .sign(a);

        return token;
    }

    /**
     * 校验token
     */
    public static DecodedJWT checkToken(String token){
        DecodedJWT decode = JWT.require(a).build().verify(token);
        return decode;
    }
    /**
     * 解析token
     */
    public static<T> T analysisToken(String token,Class<T> tClass){
        DecodedJWT decodedJWT = checkToken(token);
        String json = decodedJWT.getClaim(TOKEN_NAME).asString();
        T t = JSON.parseObject(json, tClass);
        return t;
    }

}
